.TH std::basic_streambuf::setg 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::basic_streambuf::setg \- std::basic_streambuf::setg

.SH Synopsis
   protected:
   void setg( char_type* gbeg, char_type* gcurr, char_type* gend );

   Sets the values of the pointers defining the get area. Specifically, after the call
   eback() == gbeg, gptr() == gcurr, egptr() == gend.

.SH Parameters

   gbeg  - pointer to the new beginning of the get area
   gcurr - pointer to the new current character (get pointer) in the get area
   gend  - pointer to the new end of the get area

.SH Return value

   \fI(none)\fP

.SH Example



// Run this code

 #include <iostream>
 #include <sstream>

 class null_filter_buf : public std::streambuf
 {
     std::streambuf* src;
     char ch; // single-byte buffer
 protected:
     int underflow()
     {
         traits_type::int_type i;
         while ((i = src->sbumpc()) == '\\0')
             ; // skip zeroes
         if (!traits_type::eq_int_type(i, traits_type::eof()))
         {
             ch = traits_type::to_char_type(i);
             setg(&ch, &ch, &ch+1); // make one read position available
         }
         return i;
     }
 public:
     null_filter_buf(std::streambuf* buf) : src(buf)
     {
         setg(&ch, &ch + 1, &ch + 1); // buffer is initially full
     }
 };

 void filtered_read(std::istream& in)
 {
     std::streambuf* orig = in.rdbuf();
     null_filter_buf buf(orig);
     in.rdbuf(&buf);
     for (char c; in.get(c);)
         std::cout << c;
     in.rdbuf(orig);
 }

 int main()
 {
     char a[] = "This i\\0s \\0an e\\0\\0\\0xample";
     std::istringstream in(std::string(std::begin(a), std::end(a)));
     filtered_read(in);
 }

.SH Output:

 This is an example

.SH See also

   setp repositions the beginning, next, and end pointers of the output sequence
        \fI(protected member function)\fP
